//导入数据库操作模块
const db = require('../database/index');

// 导入密码加密模块
const bcrypt = require('bcryptjs');

// 导入生成token的模块
const jwt = require('jsonwebtoken');
// 导入全局配置文件
const config = require('../config');


//注册用户的路由处理函数 
exports.register = (req, res) => {

    console.log('请求:注册用户!!')

    const userInfo = req.body;
    console.log(userInfo);


    // 对数据进行校验
    if(!userInfo.account || !userInfo.password){
        return res.send({status:1,message:'账号或密码不能为空'});
    }

    // 定义SQL语句,查询账号是否被占用
    const sqlStr = 'select * from user where UserAccount=?';

    db.query(sqlStr,userInfo.account,(err,result) => {
        // sql执行失败
        if(err) return res.send({status:1,message:err.message});
        
        // 用户名被占用
        if(result.length > 0){
            return res.send({status:1,message:'账号被占用,请更换其他账号'});
        }

    });

    // 用户名可用,继续执行注册操作
    // 插入新用户
    const sql = 'insert into user set ?';

    db.query(sql,{UserName:userInfo.username,UserAccount:userInfo.account,UserPWD:userInfo.password,UserPhone:userInfo.phone}
        ,(err,result) => {
        
        // sql执行失败
        if(err) return res.send({status:1,message:err.message});
        
        // 判断影响行数是否为1
        if(result.affectedRows !== 1) return res.send({status:1,message:'注册失败,请稍后再试'});

        // 注册成功
        res.send({status:0,message:'注册成功!'});

    });
}
 
// 登录的路由处理函数
exports.login = (req, res) => {
    
    // 获取用户提交的数据
    const userInfo = req.body;
    // console.log(userInfo);

    // sql语句
    const sql = 'select * from user where UserAccount=?'

    // 执行sql语句
    db.query(sql,userInfo.account,(err,results)=>{

        // sql执行失败
        if(err) return res.send({status:1,message:err.message});

        // 用户名不存在
        if(results.length !== 1) return res.send({status:1,message:'登录失败,请检查用户名或密码'});
        
        // 判断密码是否正确
        if (userInfo.password !== results[0].UserPWD) {
            return res.send({ status: 1, message: '登录失败,请检查用户名或密码' });
        }
        //生成token
        const user = {...results[0],UserPWD:''}
        console.log(results[0]);
        

        // 生成token,对用户信息加密
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn});
        console.log('有用户登录，token为：'+tokenStr);

        
        // 调用send方法,将token发送给客户端
        res.send({status:0,message:'登录成功',token:'Bearer '+tokenStr});
    })
}

// 用户忘记密码，验证用户名和账号进行重置密码，统一为123
exports.resetPwd = (req,res) =>{
    console.log('请求:用户忘记密码，验证用户名和账号进行重置密码，统一为123')

    // 验证账号和用户名是否为空
    if(!req.body.useraccount|| !req.body.username){
        return res.send({status:1,message:'账号或用户名不能为空'});
    }

    const sql = `select * from user where UserAccount=? and UserName=?`;

    db.query(sql,[req.body.useraccount,req.body.username],(err,results)=>{
        // sql执行失败
        if(err) return res.send({status:1,message:err.message});
        // 账号或用户名错误
        if(results.length !== 1) return res.send({status:1,message:'账号或用户名错误,用户不存在'});
        // 账号和用户名正确，重置密码为123
        const resetSql = `update user set UserPWD=? where UserAccount=? and UserName=?`;

        db.query(resetSql,['123',req.body.useraccount,req.body.username],
            (err,resetResult)=>{
            // sql执行失败
            if(err) return res.send({status:1,message:err.message});
            if(resetResult.affectedRows !== 1) return res.send({status:1,
                message:'重置密码失败'});
            res.send({status:0,message:'重置密码成功,新密码为123'});
        })
    })
}